home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / SoundAndMusic / cmix / Minc / defs.h next >
C/C++ Source or Header  |  1991-03-16  |  3KB  |  159 lines

  1.  
  2.  
  3. #include <math.h>
  4. #include <stdio.h>
  5.  
  6. /*
  7.  *  these are important Minc tuning parameters
  8.  */
  9. #define  YYLMAX    1000          /* maximum yacc line length          */
  10. #define  MAXDISPARGS  500    /* max arguments passed to dispatcher*/
  11. #define  EPS          0.0000005 /* epsilon used in float comparisons */
  12. #define  MAXSTACK     15        /* depth of function calls as args   */
  13. #define  HASHSIZE 107        /* number of buckets in string table */
  14.  
  15.  
  16. typedef union{
  17.     int ival;
  18.     struct tree *trees;
  19.     char *str;
  20.     } YYSTYPE;
  21.  
  22. extern  flerror;        /* don't execute if set = 1 */
  23.  
  24.  
  25. #define S_LOCAL     3    /* scopes */
  26. #define S_PARAM  4
  27. #define S_GLOBAL 5
  28. #define S_RESERVED  10  /* the smallest number the newscope returns */
  29. #define T_INT    'i'     /* types */
  30. #define T_FLOAT    'f'
  31. #define T_COND    '?'
  32. #define T_SCALAR 0    /* shapes */
  33. #define T_ARRAY     1
  34. #define T_FUNC     2
  35.  
  36. /* type manipulation macros;  saves bytes in symbol tables */
  37. #define mktype(type, shape) ((type)|(shape)<<8)
  38. #define xtype(type) (type&0177)
  39. #define xshape(type) ((type>>8)&03)
  40.  
  41. typedef 
  42. struct symbol {            /* symbol table entries */
  43.     struct symbol  *next;    /* next entry on hash chain */
  44.     char *name;         /* string name */
  45.     short scope;         /* scope */
  46.     short type;        /* type */
  47.     union {
  48.         double    fval;    /* floating point value */
  49.         int    ival;    /* integer representation */
  50.         double  (*fnct) ();  /* built in functions */
  51.     } v;
  52.  
  53. #ifdef never
  54. /* the following are not use at this moment */
  55.     short defined;        /* set when function defined */
  56.     short offset;         /* offset in activation frame */
  57.     SYMBOL *list;     /* next parameter in parameter list */
  58. #endif
  59. }SYMBOL;
  60.  
  61.  
  62. extern char *emalloc();
  63. extern SYMBOL *lookup();
  64. extern SYMBOL *install();
  65. extern SYMBOL *new();
  66. extern char *strsave();
  67.  
  68. /*
  69. *   intermediate representation
  70. */
  71.  
  72.  
  73. #define    PROC    20
  74. #define    SEQ    21            
  75. #define LABEL    22
  76. #define JUMP    23
  77. #define CJUMP    24
  78. #define OP     25
  79. #define UNOP    26
  80. #define CONVERT 27
  81. #define FETCH    28
  82. #define STORE    29
  83. #define MOVE    30
  84. #define ESEG    31
  85. #define BOOL    32
  86. #define NAME    33
  87. #define CONST   34
  88. #define CONSTF    35
  89. #define ALLOC    36    
  90. #define TEMP    37
  91. #define CALL    38    
  92. #define CAND    39
  93. #define NOT    40
  94. #define REL    41
  95. #define ARG    42
  96. #define NOARGS     43    
  97. #define PLUS    44    
  98. #define MINUS    45
  99. #define MUL    46
  100. #define DIV    47
  101. #define MOD    48
  102. #define AND    49      
  103. #define OR    50
  104. #define LSHIFT    51
  105. #define RSHIFT    52
  106. #define XOR    53
  107. #define EQ    54
  108. #define NEQ    55
  109. #define LT    56
  110. #define GT    57
  111. #define GEQ    58
  112. #define NEG    59
  113. #define COMP    60
  114. #define FREE    66
  115. #define POW    67
  116. #define COR     68
  117. #define TIF    69
  118. #define TWHILE  70
  119. #define TFOR    71
  120. #define TIFELSE 72
  121. #define LEQ     73
  122. #define CVTCO   74
  123. #define CVTCL    75
  124. #define CVTOL    76
  125. #define CVTOC    77
  126. #define CVTLC    78
  127. #define CVTLO    79
  128. #define TNOOP   80
  129.  
  130.  
  131.  
  132.  
  133. typedef struct tree {
  134.     char    op;    /* the operator */
  135.     char     kind;   /* what kind of node is this */
  136.     char    type;    /* at execution time: type of value*/
  137.     union {
  138.         char   *fctname;    /* name to  dispatcher function */
  139.         
  140.         } x;
  141.     union {
  142.         double  fval;
  143.         int     ival;
  144.         
  145.     }v;
  146.      union {
  147.         struct tree  *child[4];
  148.         SYMBOL *sym;
  149.         int      ival;
  150.         float     fval;
  151.     }u;
  152. }*Tree;
  153.  
  154.  
  155. extern Tree      program;        /* return value of yyparse           */     
  156.  
  157.  
  158.  
  159.